package com.ruimei.util;

import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
/**
 * MD5加密
 */
public class Md5Encrypt
{
  private static final char[] DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
  
  public static String md5(String text)
  {
    MessageDigest msgDigest = null;
    try
    {
      msgDigest = MessageDigest.getInstance("MD5");
    }
    catch (NoSuchAlgorithmException e)
    {
      throw new IllegalStateException("System doesn't support MD5 algorithm.");
    }
    try
    {
      msgDigest.update(text.getBytes("utf-8"));
    }
    catch (UnsupportedEncodingException e)
    {
      throw new IllegalStateException("System doesn't support your  EncodingException.");
    }
    byte[] bytes = msgDigest.digest();
    
    String md5Str = new String(encodeHex(bytes));
    
    return md5Str;
  }
  
  public static char[] encodeHex(byte[] data)
  {
    int l = data.length;
    
    char[] out = new char[l << 1];
    
    int i = 0;
    for (int j = 0; i < l; i++)
    {
      out[(j++)] = DIGITS[((0xF0 & data[i]) >>> 4)];
      out[(j++)] = DIGITS[(0xF & data[i])];
    }
    return out;
  }
  
  private static String byteArrayToHexString(byte[] b)
  {
    StringBuffer resultSb = new StringBuffer();
    for (int i = 0; i < b.length; i++) {
      resultSb.append(byteToHexString(b[i]));
    }
    return resultSb.toString();
  }
  
  private static String byteToHexString(byte b)
  {
    int n = b;
    if (n < 0) {
      n += 256;
    }
    int d1 = n / 16;
    int d2 = n % 16;
    return hexDigits[d1] + hexDigits[d2];
  }
  
  public static String MD5Encode(String origin, String charsetname)
  {
    String resultString = null;
    try
    {
      resultString = new String(origin);
      MessageDigest md = MessageDigest.getInstance("MD5");
      if ((charsetname == null) || ("".equals(charsetname))) {
        resultString = byteArrayToHexString(md.digest(resultString
          .getBytes()));
      } else {
        resultString = byteArrayToHexString(md.digest(resultString
          .getBytes(charsetname)));
      }
    }
    catch (Exception localException) {}
    return resultString;
  }
  
  private static final String[] hexDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
  
  public static Map<String, String> MdPwd(String password)
  {
    Map<String, String> map = new HashMap();
    if (StringUtils.isBlank(password)) {
      return map;
    }
    String salt = CommUtil.randomString(6);
    String md5 = md5(md5(password) + salt);
    
    map.put("salt", salt);
    map.put("password", md5);
    return map;
  }
  
  public static String MdPwd(String password, String salt)
  {
    if (StringUtils.isBlank(password)) {
      return "";
    }
    return md5(md5(password) + salt);
  }
  
  public static void main(String[] args)
  {
    System.out.println(MdPwd("123456", "ASUIQS"));
  }
}


/* Location:              E:\360MoveData\Users\admin\Desktop\teacher_wap-0.0.1-SNAPSHOT.jar!\BOOT-INF\classes\com\ruime\\util\Md5Encrypt.class
 * Java compiler version: 8 (52.0)
 * JD-Core Version:       0.7.1
 */